SonarSource Rules
  • Products

    In-IDE

    Code Quality and Security in your IDE with SonarQube Ide

    IDE extension that lets you fix coding issues before they exist!

    Discover SonarQube for IDE

    SaaS

    Code Quality and Security in the cloud with SonarQube Cloud

    Setup is effortless and analysis is automatic for most languages

    Discover SonarQube Cloud

    Self-Hosted

    Code Quality and Security Self-Hosted with SonarQube Server

    Fast, accurate analysis; enterprise scalability

    Discover SonarQube Server
  • SecretsSecrets
  • ABAPABAP
  • AnsibleAnsible
  • ApexApex
  • AzureResourceManagerAzureResourceManager
  • CC
  • C#C#
  • C++C++
  • CloudFormationCloudFormation
  • COBOLCOBOL
  • CSSCSS
  • DartDart
  • DockerDocker
  • FlexFlex
  • GitHub ActionsGitHub Actions
  • GoGo
  • HTMLHTML
  • JavaJava
  • JavaScriptJavaScript
  • JSONJSON
  • JCLJCL
  • KotlinKotlin
  • KubernetesKubernetes
  • Objective CObjective C
  • PHPPHP
  • PL/IPL/I
  • PL/SQLPL/SQL
  • PythonPython
  • RPGRPG
  • RubyRuby
  • RustRust
  • ScalaScala
  • ShellShell
  • SwiftSwift
  • TerraformTerraform
  • TextText
  • TypeScriptTypeScript
  • T-SQLT-SQL
  • VB.NETVB.NET
  • VB6VB6
  • XMLXML
  • YAMLYAML
PHP

PHP static code analysis

Unique rules to find Bugs, Vulnerabilities, Security Hotspots, and Code Smells in your PHP code

  • All rules 273
  • Vulnerability42
  • Bug51
  • Security Hotspot34
  • Code Smell146
 
Tags
    Impact
      Clean code attribute
        1. Hard-coded secrets are security-sensitive

           Security Hotspot
        2. Constructing arguments of system commands from user input is security-sensitive

           Security Hotspot
        3. Allowing unfiltered HTML content in WordPress is security-sensitive

           Security Hotspot
        4. Allowing unauthenticated database repair in WordPress is security-sensitive

           Security Hotspot
        5. Allowing all external requests from a WordPress server is security-sensitive

           Security Hotspot
        6. Disabling automatic updates is security-sensitive

           Security Hotspot
        7. WordPress theme and plugin editors are security-sensitive

           Security Hotspot
        8. Allowing requests with excessive content length is security-sensitive

           Security Hotspot
        9. Using clear-text protocols is security-sensitive

           Security Hotspot
        10. Manual generation of session ID is security-sensitive

           Security Hotspot
        11. Having a permissive Cross-Origin Resource Sharing policy is security-sensitive

           Security Hotspot
        12. Expanding archive files without controlling resource consumption is security-sensitive

           Security Hotspot
        13. Controlling permissions is security-sensitive

           Security Hotspot
        14. Reading the Standard Input is security-sensitive

           Security Hotspot
        15. Signaling processes is security-sensitive

           Security Hotspot
        16. Using command line arguments is security-sensitive

           Security Hotspot
        17. Using Sockets is security-sensitive

           Security Hotspot
        18. Configuring loggers is security-sensitive

           Security Hotspot
        19. Using weak hashing algorithms is security-sensitive

           Security Hotspot
        20. Encrypting data is security-sensitive

           Security Hotspot
        21. Using regular expressions is security-sensitive

           Security Hotspot
        22. Deserializing objects from an untrusted source is security-sensitive

           Security Hotspot
        23. Delivering code in production with debug features activated is security-sensitive

           Security Hotspot
        24. Disabling CSRF protections is security-sensitive

           Security Hotspot
        25. Creating cookies with broadly defined "domain" flags is security-sensitive

           Security Hotspot
        26. Creating cookies without the "HttpOnly" flag is security-sensitive

           Security Hotspot
        27. Setting loose POSIX file permissions is security-sensitive

           Security Hotspot
        28. Writing cookies is security-sensitive

           Security Hotspot
        29. Using pseudorandom number generators (PRNGs) is security-sensitive

           Security Hotspot
        30. Creating cookies without the "secure" flag is security-sensitive

           Security Hotspot
        31. Formatting SQL queries is security-sensitive

           Security Hotspot
        32. Hard-coded credentials are security-sensitive

           Security Hotspot
        33. Dynamically executing code is security-sensitive

           Security Hotspot
        34. Using hardcoded IP addresses is security-sensitive

           Security Hotspot

        Using regular expressions is security-sensitive

        Security Hotspot

          This rule is deprecated; use S2631 instead.

          Using regular expressions is security-sensitive. It has led in the past to the following vulnerabilities:

          • CVE-2017-16021
          • CVE-2018-13863
          • CVE-2018-8926

          Evaluating regular expressions against input strings is potentially an extremely CPU-intensive task. Specially crafted regular expressions such as /(a+)+s/ will take several seconds to evaluate the input string aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabs. The problem is that with every additional a character added to the input, the time required to evaluate the regex doubles. However, the equivalent regular expression, a+s (without grouping) is efficiently evaluated in milliseconds and scales linearly with the input size.

          Evaluating such regular expressions opens the door to Regular expression Denial of Service (ReDoS) attacks. In the context of a web application, attackers can force the web server to spend all of its resources evaluating regular expressions thereby making the service inaccessible to genuine users.

          This rule flags any execution of a hardcoded regular expression which has at least 3 characters and contains at at least two instances of any of the following characters *+{.

          Example: (a+)*

          The following functions are detected as executing regular expressions:

          • PCRE: Perl style regular expressions: preg_filter, preg_grep, preg_match_all, preg_match, preg_replace_callback, preg_replace, preg_split
          • POSIX extended, which are deprecated: ereg_replace, ereg, eregi_replace, eregi, split, spliti.
          • fnmatch
          • Any of the multibyte string regular expressions: mb_eregi_replace, mb_ereg_match, mb_ereg_replace_callback, mb_ereg_replace, mb_ereg_search_init, mb_ereg_search_pos, mb_ereg_search_regs, mb_ereg_search, mb_ereg, mb_eregi_replace, mb_eregi

          Note that ereg* functions have been removed in PHP 7 and PHP 5 end of life date is the 1st of January 2019. Using PHP 5 is dangerous as there will be no security fix.

          This rule’s goal is to guide security code reviews.

          Ask Yourself Whether

          • the executed regular expression is sensitive and a user can provide a string which will be analyzed by this regular expression.
          • your regular expression engine performance decrease with specially crafted inputs and regular expressions.

          There is a risk if you answered yes to any of those questions.

          Recommended Secure Coding Practices

          Do not set the constant pcre.backtrack_limit to a high value as it will increase the resource consumption of PCRE functions.

          Check the error codes of PCRE functions via preg_last_error.

          Check whether your regular expression engine (the algorithm executing your regular expression) has any known vulnerabilities. Search for vulnerability reports mentioning the one engine you’re are using. Do not run vulnerable regular expressions on user input.

          Use if possible a library which is not vulnerable to Redos Attacks such as Google Re2.

          Remember also that a ReDos attack is possible if a user-provided regular expression is executed. This rule won’t detect this kind of injection.

          Avoid executing a user input string as a regular expression or use at least preg_quote to escape regular expression characters.

          Exceptions

          An issue will be created for the functions mb_ereg_search_pos, mb_ereg_search_regs and mb_ereg_search if and only if at least the first argument, i.e. the $pattern, is provided.

          The current implementation does not follow variables. It will only detect regular expressions hard-coded directly in the function call.

          $pattern = "/(a+)+/";
          $result = eregi($pattern, $input);  // No issue will be raised even if it is Sensitive
          

          Some corner-case regular expressions will not raise an issue even though they might be vulnerable. For example: (a|aa)``, ``(a|a?).

          It is a good idea to test your regular expression if it has the same pattern on both side of a "|".

          See

          • OWASP - Top 10 2017 Category A1 - Injection
          • CWE - CWE-624 - Executable Regular Expression Error
          • OWASP Regular expression Denial of Service - ReDoS
            Available In:
          • SonarQube IdeCatch issues on the fly,
            in your IDE
          • SonarQube CloudDetect issues in your GitHub, Azure DevOps Services, Bitbucket Cloud, GitLab repositories
          • SonarQube Community BuildAnalyze code in your
            on-premise CI
            Available Since
            9.1
          • SonarQube ServerAnalyze code in your
            on-premise CI
            Developer Edition
            Available Since
            9.1

          © 2008-2025 SonarSource SA. All rights reserved.

          Privacy Policy | Cookie Policy | Terms of Use